// 版权归GoFrame作者(https://goframe.org)所有。保留所有权利。
//
// 本源代码形式受MIT许可证条款约束。
// 如果未随本文件一同分发MIT许可证副本，
// 您可以在https://github.com/gogf/gf处获取。
// md5:a9832f33b234e3f3

package goai

import (
	"gitee.com/go_888/goframe/internal/json"
)

type X结构_SecurityScheme struct {
	Type             string          `json:"type,omitempty"`
	Description      string          `json:"description,omitempty"`
	Name             string          `json:"name,omitempty"`
	In               string          `json:"in,omitempty"`
	Scheme           string          `json:"scheme,omitempty"`
	BearerFormat     string          `json:"bearerFormat,omitempty"`
	Flows            *X结构_OAuthFlows `json:"flows,omitempty"`
	OpenIdConnectUrl string          `json:"openIdConnectUrl,omitempty"`
}

type SecuritySchemes map[string]X结构_SecuritySchemeRef

type X结构_SecuritySchemeRef struct {
	Ref   string
	Value *X结构_SecurityScheme
}

type SecurityRequirements []SecurityRequirement

type SecurityRequirement map[string][]string

type X结构_OAuthFlows struct {
	Implicit          *X结构_OAuthFlow `json:"implicit,omitempty"`
	Password          *X结构_OAuthFlow `json:"password,omitempty"`
	ClientCredentials *X结构_OAuthFlow `json:"clientCredentials,omitempty"`
	AuthorizationCode *X结构_OAuthFlow `json:"authorizationCode,omitempty"`
}

type X结构_OAuthFlow struct {
	AuthorizationURL string            `json:"authorizationUrl,omitempty"`
	TokenURL         string            `json:"tokenUrl,omitempty"`
	RefreshURL       string            `json:"refreshUrl,omitempty"`
	Scopes           map[string]string `json:"scopes"`
}

func (r X结构_SecuritySchemeRef) MarshalJSON() ([]byte, error) {
	if r.Ref != "" {
		return formatRefToBytes(r.Ref), nil
	}
	return json.Marshal(r.Value)
}
